<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="referrer" content="never">
    <title>原型属性</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
    </style>
</head>
<body>
    
    <script type="text/javascript">
        /* 
        function.length  函数的形参个数
        function.name    函数名 （不一定可调用）
        function.prototype 函数的原型对象

        JS中函数都有一个 prototype 属性指向函数的原型对象
        函数：用于创建对象的函数 -- 构造函数，人为的添加区别：函数首字母大写
            new 构造函数()   --》 new Date()/Object()/Array()/RegExp()/String()...
            JS原生构造函数
            构造函数内部使用 this 绑定属性
            使用 new 方式调用

        fn.prototype.contructor 指明原型对象是哪一个函数的原型对象，默认指向 fn

        通过 new 构造函数() 创建的对象称为该构造函数的 实例，实例对象有原型属性(__proto__)指向构造函数的原型
        */

        function fn(){
            console.log("aaa");
            
        }

        var gn = function (){ 
            console.log("gn", gn);
        }

        var f = fn;

        var g = function func(){
            console.log("func", func);
        };

        console.log(fn.name); // fn
        console.log(gn.name); // gn
        console.log(f.name);  // fn
        console.log(g.name);  // func

        f(); // aaa
        fn(); // aaa
        g(); // func
        // func();

        gn();


        var a = 10;
        (function a(){
           console.log(a); // func
        }());

        console.clear();

        function User(){
            this.name = "李白";
        }

        var user = new User();
        // user 是 User 的实例
        console.log(user);
        console.log("实例的原型属性指向创建它的构造函数的原型", user.__proto__ === User.prototype);
        console.log("构造函数的原型constructor指向该构造函数", User.prototype.constructor === User);
        console.log("构造函数的原型", User.prototype);
        
    </script>
</body>
</html>